mirror of
https://github.com/python/cpython.git
synced 2025-07-23 19:25:40 +00:00
Add tests for including __dict__ and/or __weakref__ in __slots__.
Add some more rigor to slotmultipleinheritance().
This commit is contained in:
parent
b0df6a1afa
commit
8b056da6c8
1 changed files with 50 additions and 1 deletions
|
@ -1175,6 +1175,51 @@ def slots():
|
||||||
new_objects = len(gc.get_objects())
|
new_objects = len(gc.get_objects())
|
||||||
vereq(orig_objects, new_objects)
|
vereq(orig_objects, new_objects)
|
||||||
|
|
||||||
|
def slotspecials():
|
||||||
|
if verbose: print "Testing __dict__ and __weakref__ in __slots__..."
|
||||||
|
|
||||||
|
class D(object):
|
||||||
|
__slots__ = ["__dict__"]
|
||||||
|
a = D()
|
||||||
|
verify(hasattr(a, "__dict__"))
|
||||||
|
verify(not hasattr(a, "__weakref__"))
|
||||||
|
a.foo = 42
|
||||||
|
vereq(a.__dict__, {"foo": 42})
|
||||||
|
|
||||||
|
class W(object):
|
||||||
|
__slots__ = ["__weakref__"]
|
||||||
|
a = W()
|
||||||
|
verify(hasattr(a, "__weakref__"))
|
||||||
|
verify(not hasattr(a, "__dict__"))
|
||||||
|
try:
|
||||||
|
a.foo = 42
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
raise TestFailed, "shouldn't be allowed to set a.foo"
|
||||||
|
|
||||||
|
class C1(W, D):
|
||||||
|
__slots__ = []
|
||||||
|
a = C1()
|
||||||
|
verify(hasattr(a, "__dict__"))
|
||||||
|
verify(hasattr(a, "__weakref__"))
|
||||||
|
a.foo = 42
|
||||||
|
vereq(a.__dict__, {"foo": 42})
|
||||||
|
|
||||||
|
class C2(D, W):
|
||||||
|
__slots__ = []
|
||||||
|
a = C2()
|
||||||
|
verify(hasattr(a, "__dict__"))
|
||||||
|
verify(hasattr(a, "__weakref__"))
|
||||||
|
a.foo = 42
|
||||||
|
vereq(a.__dict__, {"foo": 42})
|
||||||
|
|
||||||
|
class C3(C1, C2):
|
||||||
|
__slots__ = []
|
||||||
|
|
||||||
|
class C4(C2, C1):
|
||||||
|
__slots__ = []
|
||||||
|
|
||||||
def dynamics():
|
def dynamics():
|
||||||
if verbose: print "Testing class attribute propagation..."
|
if verbose: print "Testing class attribute propagation..."
|
||||||
class D(object):
|
class D(object):
|
||||||
|
@ -3245,7 +3290,10 @@ def slotmultipleinheritance():
|
||||||
pass
|
pass
|
||||||
class C(A,B) :
|
class C(A,B) :
|
||||||
__slots__=()
|
__slots__=()
|
||||||
C().x=2
|
vereq(C.__basicsize__, B.__basicsize__)
|
||||||
|
verify(hasattr(C, '__dict__'))
|
||||||
|
verify(hasattr(C, '__weakref__'))
|
||||||
|
C().x = 2
|
||||||
|
|
||||||
def testrmul():
|
def testrmul():
|
||||||
# SF patch 592646
|
# SF patch 592646
|
||||||
|
@ -3304,6 +3352,7 @@ def test_main():
|
||||||
diamond()
|
diamond()
|
||||||
objects()
|
objects()
|
||||||
slots()
|
slots()
|
||||||
|
slotspecials()
|
||||||
dynamics()
|
dynamics()
|
||||||
errors()
|
errors()
|
||||||
classmethods()
|
classmethods()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue