annotate Lib/test/test_isinstance.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 07488c3c85f1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
1 # Tests some corner cases with isinstance() and issubclass(). While these
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
2 # tests use new style classes and properties, they actually do whitebox
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
3 # testing of error conditions uncovered when using extension types.
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
4
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
5 import unittest
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 43577
diff changeset
6 from test import support
31723
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
7 import sys
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
8
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
9
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
10
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
11 class TestIsInstanceExceptions(unittest.TestCase):
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
12 # Test to make sure that an AttributeError when accessing the instance's
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
13 # class's bases is masked. This was actually a bug in Python 2.2 and
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
14 # 2.2.1 where the exception wasn't caught but it also wasn't being cleared
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
15 # (leading to an "undetected error" in the debug build). Set up is,
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
16 # isinstance(inst, cls) where:
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
17 #
81772
07488c3c85f1 Fix a few typos and a double semicolon. Patch by Eitan Adler.
Ezio Melotti <ezio.melotti@gmail.com>
parents: 66298
diff changeset
18 # - cls isn't a type, or a tuple
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
19 # - cls has a __bases__ attribute
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
20 # - inst has a __class__ attribute
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
21 # - inst.__class__ as no __bases__ attribute
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
22 #
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
23 # Sounds complicated, I know, but this mimics a situation where an
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
24 # extension type raises an AttributeError when its __bases__ attribute is
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
25 # gotten. In that case, isinstance() should return False.
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
26 def test_class_has_no_bases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
27 class I(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
28 def getclass(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
29 # This must return an object that has no __bases__ attribute
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
30 return None
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
31 __class__ = property(getclass)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
32
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
33 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
34 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
35 return ()
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
36 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
37
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
38 self.assertEqual(False, isinstance(I(), C()))
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
39
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
40 # Like above except that inst.__class__.__bases__ raises an exception
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
41 # other than AttributeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
42 def test_bases_raises_other_than_attribute_error(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
43 class E(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
44 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
45 raise RuntimeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
46 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
47
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
48 class I(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
49 def getclass(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
50 return E()
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
51 __class__ = property(getclass)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
52
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
53 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
54 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
55 return ()
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
56 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
57
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
58 self.assertRaises(RuntimeError, isinstance, I(), C())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
59
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
60 # Here's a situation where getattr(cls, '__bases__') raises an exception.
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
61 # If that exception is not AttributeError, it should not get masked
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
62 def test_dont_mask_non_attribute_error(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
63 class I: pass
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
64
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
65 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
66 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
67 raise RuntimeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
68 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
69
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
70 self.assertRaises(RuntimeError, isinstance, I(), C())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
71
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
72 # Like above, except that getattr(cls, '__bases__') raises an
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
73 # AttributeError, which /should/ get masked as a TypeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
74 def test_mask_attribute_error(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
75 class I: pass
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
76
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
77 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
78 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
79 raise AttributeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
80 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
81
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
82 self.assertRaises(TypeError, isinstance, I(), C())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
83
66291
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
84 # check that we don't mask non AttributeErrors
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
85 # see: http://bugs.python.org/issue1574217
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
86 def test_isinstance_dont_mask_non_attribute_error(self):
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
87 class C(object):
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
88 def getclass(self):
66298
3a0e7000dc8f add space
Benjamin Peterson <benjamin@python.org>
parents: 66291
diff changeset
89 raise RuntimeError
3a0e7000dc8f add space
Benjamin Peterson <benjamin@python.org>
parents: 66291
diff changeset
90 __class__ = property(getclass)
66291
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
91
66298
3a0e7000dc8f add space
Benjamin Peterson <benjamin@python.org>
parents: 66291
diff changeset
92 c = C()
66291
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
93 self.assertRaises(RuntimeError, isinstance, c, bool)
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
94
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
95 # test another code path
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
96 class D: pass
80b48a3a2473 #1574217: only swallow AttributeErrors in isinstance, not everything.
R. David Murray <rdmurray@bitdance.com>
parents: 47201
diff changeset
97 self.assertRaises(RuntimeError, isinstance, c, D)
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
98
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
99
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
100 # These tests are similar to above, but tickle certain code paths in
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
101 # issubclass() instead of isinstance() -- really PyObject_IsSubclass()
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
102 # vs. PyObject_IsInstance().
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
103 class TestIsSubclassExceptions(unittest.TestCase):
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
104 def test_dont_mask_non_attribute_error(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
105 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
106 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
107 raise RuntimeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
108 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
109
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
110 class S(C): pass
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
111
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
112 self.assertRaises(RuntimeError, issubclass, C(), S())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
113
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
114 def test_mask_attribute_error(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
115 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
116 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
117 raise AttributeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
118 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
119
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
120 class S(C): pass
23521
a90faa5f9417 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 23265
diff changeset
121
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
122 self.assertRaises(TypeError, issubclass, C(), S())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
123
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
124 # Like above, but test the second branch, where the __bases__ of the
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
125 # second arg (the cls arg) is tested. This means the first arg must
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
126 # return a valid __bases__, and it's okay for it to be a normal --
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
127 # unrelated by inheritance -- class.
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
128 def test_dont_mask_non_attribute_error_in_cls_arg(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
129 class B: pass
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
130
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
131 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
132 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
133 raise RuntimeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
134 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
135
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
136 self.assertRaises(RuntimeError, issubclass, B, C())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
137
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
138 def test_mask_attribute_error_in_cls_arg(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
139 class B: pass
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
140
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
141 class C(object):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
142 def getbases(self):
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
143 raise AttributeError
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
144 __bases__ = property(getbases)
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
145
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
146 self.assertRaises(TypeError, issubclass, B, C())
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
147
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
148
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
149
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
150 # meta classes for creating abstract classes and instances
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
151 class AbstractClass(object):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
152 def __init__(self, bases):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
153 self.bases = bases
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
154
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
155 def getbases(self):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
156 return self.bases
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
157 __bases__ = property(getbases)
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
158
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
159 def __call__(self):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
160 return AbstractInstance(self)
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
161
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
162 class AbstractInstance(object):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
163 def __init__(self, klass):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
164 self.klass = klass
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
165
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
166 def getclass(self):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
167 return self.klass
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
168 __class__ = property(getclass)
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
169
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
170 # abstract classes
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
171 AbstractSuper = AbstractClass(bases=())
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
172
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
173 AbstractChild = AbstractClass(bases=(AbstractSuper,))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
174
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
175 # normal classes
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
176 class Super:
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
177 pass
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
178
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
179 class Child(Super):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
180 pass
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
181
26622
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
182 # new-style classes
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
183 class NewSuper(object):
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
184 pass
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
185
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
186 class NewChild(NewSuper):
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
187 pass
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
188
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
189
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
190
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
191 class TestIsInstanceIsSubclass(unittest.TestCase):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
192 # Tests to ensure that isinstance and issubclass work on abstract
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
193 # classes and instances. Before the 2.2 release, TypeErrors were
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
194 # raised when boolean values should have been returned. The bug was
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
195 # triggered by mixing 'normal' classes and instances were with
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
196 # 'abstract' classes and instances. This case tries to test all
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
197 # combinations.
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
198
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
199 def test_isinstance_normal(self):
23521
a90faa5f9417 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 23265
diff changeset
200 # normal instances
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
201 self.assertEqual(True, isinstance(Super(), Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
202 self.assertEqual(False, isinstance(Super(), Child))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
203 self.assertEqual(False, isinstance(Super(), AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
204 self.assertEqual(False, isinstance(Super(), AbstractChild))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
205
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
206 self.assertEqual(True, isinstance(Child(), Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
207 self.assertEqual(False, isinstance(Child(), AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
208
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
209 def test_isinstance_abstract(self):
23521
a90faa5f9417 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 23265
diff changeset
210 # abstract instances
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
211 self.assertEqual(True, isinstance(AbstractSuper(), AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
212 self.assertEqual(False, isinstance(AbstractSuper(), AbstractChild))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
213 self.assertEqual(False, isinstance(AbstractSuper(), Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
214 self.assertEqual(False, isinstance(AbstractSuper(), Child))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
215
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
216 self.assertEqual(True, isinstance(AbstractChild(), AbstractChild))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
217 self.assertEqual(True, isinstance(AbstractChild(), AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
218 self.assertEqual(False, isinstance(AbstractChild(), Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
219 self.assertEqual(False, isinstance(AbstractChild(), Child))
23521
a90faa5f9417 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 23265
diff changeset
220
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
221 def test_subclass_normal(self):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
222 # normal classes
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
223 self.assertEqual(True, issubclass(Super, Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
224 self.assertEqual(False, issubclass(Super, AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
225 self.assertEqual(False, issubclass(Super, Child))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
226
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
227 self.assertEqual(True, issubclass(Child, Child))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
228 self.assertEqual(True, issubclass(Child, Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
229 self.assertEqual(False, issubclass(Child, AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
230
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
231 def test_subclass_abstract(self):
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
232 # abstract classes
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
233 self.assertEqual(True, issubclass(AbstractSuper, AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
234 self.assertEqual(False, issubclass(AbstractSuper, AbstractChild))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
235 self.assertEqual(False, issubclass(AbstractSuper, Child))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
236
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
237 self.assertEqual(True, issubclass(AbstractChild, AbstractChild))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
238 self.assertEqual(True, issubclass(AbstractChild, AbstractSuper))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
239 self.assertEqual(False, issubclass(AbstractChild, Super))
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
240 self.assertEqual(False, issubclass(AbstractChild, Child))
23521
a90faa5f9417 Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 23265
diff changeset
241
26612
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
242 def test_subclass_tuple(self):
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
243 # test with a tuple as the second argument classes
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
244 self.assertEqual(True, issubclass(Child, (Child,)))
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
245 self.assertEqual(True, issubclass(Child, (Super,)))
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
246 self.assertEqual(False, issubclass(Super, (Child,)))
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
247 self.assertEqual(True, issubclass(Super, (Child, Super)))
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
248 self.assertEqual(False, issubclass(Child, ()))
26622
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
249 self.assertEqual(True, issubclass(Super, (Child, (Super,))))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
250
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
251 self.assertEqual(True, issubclass(NewChild, (NewChild,)))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
252 self.assertEqual(True, issubclass(NewChild, (NewSuper,)))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
253 self.assertEqual(False, issubclass(NewSuper, (NewChild,)))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
254 self.assertEqual(True, issubclass(NewSuper, (NewChild, NewSuper)))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
255 self.assertEqual(False, issubclass(NewChild, ()))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
256 self.assertEqual(True, issubclass(NewSuper, (NewChild, (NewSuper,))))
19507a1d0254 Change issubclass() so that recursive tuples (directly or indirectly
Walter Dörwald <walter@livinglogic.de>
parents: 26612
diff changeset
257
40644
1c26505c1de6 Rip out 'long' and 'L'-suffixed integer literals.
Guido van Rossum <guido@python.org>
parents: 35309
diff changeset
258 self.assertEqual(True, issubclass(int, (int, (float, int))))
43577
ace45b361e87 Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents: 41986
diff changeset
259 self.assertEqual(True, issubclass(str, (str, (Child, NewChild, str))))
26612
97f83542f8ee Enhance issubclass() and PyObject_IsSubclass() so that a tuple is
Walter Dörwald <walter@livinglogic.de>
parents: 24364
diff changeset
260
31723
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
261 def test_subclass_recursion_limit(self):
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
262 # make sure that issubclass raises RuntimeError before the C stack is
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
263 # blown
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
264 self.assertRaises(RuntimeError, blowstack, issubclass, str, str)
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
265
31723
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
266 def test_isinstance_recursion_limit(self):
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
267 # make sure that issubclass raises RuntimeError before the C stack is
32538
4fab4a5cce2f Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents: 31723
diff changeset
268 # blown
31723
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
269 self.assertRaises(RuntimeError, blowstack, isinstance, '', str)
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
270
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
271 def blowstack(fxn, arg, compare_to):
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
272 # Make sure that calling isinstance with a deeply nested tuple for its
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
273 # argument will raise RuntimeError eventually.
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
274 tuple_arg = (compare_to,)
41642
a6eb6acfe04a Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41575
diff changeset
275 for cnt in range(sys.getrecursionlimit()+5):
31723
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
276 tuple_arg = (tuple_arg,)
d69fb35f1eae Limit the nesting depth of a tuple passed as the second argument to
Brett Cannon <bcannon@gmail.com>
parents: 28917
diff changeset
277 fxn(arg, tuple_arg)
23265
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
278
8d4b25ceeefe Add more tests for abstract isinstance() and issubclass().
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 23262
diff changeset
279
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
280 def test_main():
47201
9c930a32cebb #2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents: 43577
diff changeset
281 support.run_unittest(
28917
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 26622
diff changeset
282 TestIsInstanceExceptions,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 26622
diff changeset
283 TestIsSubclassExceptions,
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 26622
diff changeset
284 TestIsInstanceIsSubclass
1741af48fd9f Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents: 26622
diff changeset
285 )
23262
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
286
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
287
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
288 if __name__ == '__main__':
7353977d6b64 Unit tests for the changes in abstract.c version 2.101. The debug
Barry Warsaw <barry@python.org>
parents:
diff changeset
289 test_main()