mirror of https://github.com/python/cpython
gh-126417: validate ABC methods on multiprocessing proxy types (#126454)
Checks that appropriate dunder __ methods exist on the dict and list proxy types. Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
82269c7d58
commit
6ee542d491
|
@ -2464,6 +2464,19 @@ class _TestContainers(BaseTestCase):
|
||||||
a = self.list()
|
a = self.list()
|
||||||
self.assertIsInstance(a, collections.abc.MutableSequence)
|
self.assertIsInstance(a, collections.abc.MutableSequence)
|
||||||
|
|
||||||
|
# MutableSequence also has __iter__, but we can iterate over
|
||||||
|
# ListProxy using __getitem__ instead. Adding __iter__ to ListProxy
|
||||||
|
# would change the behavior of a list modified during iteration.
|
||||||
|
mutable_sequence_methods = (
|
||||||
|
'__contains__', '__delitem__', '__getitem__', '__iadd__',
|
||||||
|
'__len__', '__reversed__', '__setitem__', 'append',
|
||||||
|
'clear', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
|
||||||
|
'reverse',
|
||||||
|
)
|
||||||
|
for name in mutable_sequence_methods:
|
||||||
|
with self.subTest(name=name):
|
||||||
|
self.assertTrue(callable(getattr(a, name)))
|
||||||
|
|
||||||
def test_list_iter(self):
|
def test_list_iter(self):
|
||||||
a = self.list(list(range(10)))
|
a = self.list(list(range(10)))
|
||||||
it = iter(a)
|
it = iter(a)
|
||||||
|
@ -2508,6 +2521,15 @@ class _TestContainers(BaseTestCase):
|
||||||
a = self.dict()
|
a = self.dict()
|
||||||
self.assertIsInstance(a, collections.abc.MutableMapping)
|
self.assertIsInstance(a, collections.abc.MutableMapping)
|
||||||
|
|
||||||
|
mutable_mapping_methods = (
|
||||||
|
'__contains__', '__delitem__', '__eq__', '__getitem__', '__iter__',
|
||||||
|
'__len__', '__ne__', '__setitem__', 'clear', 'get', 'items',
|
||||||
|
'keys', 'pop', 'popitem', 'setdefault', 'update', 'values',
|
||||||
|
)
|
||||||
|
for name in mutable_mapping_methods:
|
||||||
|
with self.subTest(name=name):
|
||||||
|
self.assertTrue(callable(getattr(a, name)))
|
||||||
|
|
||||||
def test_dict_iter(self):
|
def test_dict_iter(self):
|
||||||
d = self.dict()
|
d = self.dict()
|
||||||
indices = list(range(65, 70))
|
indices = list(range(65, 70))
|
||||||
|
|
Loading…
Reference in New Issue