mirror of
https://github.com/python/cpython.git
synced 2025-07-31 23:23:11 +00:00
SF #1479988: add methods to allow access to weakrefs for the
weakref.WeakKeyDictionary and weakref.WeakValueDictionary
This commit is contained in:
parent
a6d01cec3f
commit
017e68c413
3 changed files with 125 additions and 0 deletions
|
@ -769,10 +769,54 @@ class MappingTestCase(TestBase):
|
|||
dict, objects = self.make_weak_keyed_dict()
|
||||
self.check_iters(dict)
|
||||
|
||||
# Test keyrefs()
|
||||
refs = dict.keyrefs()
|
||||
self.assertEqual(len(refs), len(objects))
|
||||
objects2 = list(objects)
|
||||
for wr in refs:
|
||||
ob = wr()
|
||||
self.assert_(dict.has_key(ob))
|
||||
self.assert_(ob in dict)
|
||||
self.assertEqual(ob.arg, dict[ob])
|
||||
objects2.remove(ob)
|
||||
self.assertEqual(len(objects2), 0)
|
||||
|
||||
# Test iterkeyrefs()
|
||||
objects2 = list(objects)
|
||||
self.assertEqual(len(list(dict.iterkeyrefs())), len(objects))
|
||||
for wr in dict.iterkeyrefs():
|
||||
ob = wr()
|
||||
self.assert_(dict.has_key(ob))
|
||||
self.assert_(ob in dict)
|
||||
self.assertEqual(ob.arg, dict[ob])
|
||||
objects2.remove(ob)
|
||||
self.assertEqual(len(objects2), 0)
|
||||
|
||||
def test_weak_valued_iters(self):
|
||||
dict, objects = self.make_weak_valued_dict()
|
||||
self.check_iters(dict)
|
||||
|
||||
# Test valuerefs()
|
||||
refs = dict.valuerefs()
|
||||
self.assertEqual(len(refs), len(objects))
|
||||
objects2 = list(objects)
|
||||
for wr in refs:
|
||||
ob = wr()
|
||||
self.assertEqual(ob, dict[ob.arg])
|
||||
self.assertEqual(ob.arg, dict[ob.arg].arg)
|
||||
objects2.remove(ob)
|
||||
self.assertEqual(len(objects2), 0)
|
||||
|
||||
# Test itervaluerefs()
|
||||
objects2 = list(objects)
|
||||
self.assertEqual(len(list(dict.itervaluerefs())), len(objects))
|
||||
for wr in dict.itervaluerefs():
|
||||
ob = wr()
|
||||
self.assertEqual(ob, dict[ob.arg])
|
||||
self.assertEqual(ob.arg, dict[ob.arg].arg)
|
||||
objects2.remove(ob)
|
||||
self.assertEqual(len(objects2), 0)
|
||||
|
||||
def check_iters(self, dict):
|
||||
# item iterator:
|
||||
items = dict.items()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue