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:
Stephen Morton 2024-11-10 23:08:58 -08:00 committed by GitHub
parent 82269c7d58
commit 6ee542d491
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 22 additions and 0 deletions

View File

@ -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))