https://github.com/python/cpython/commit/6ee542d491589b470ec7cdd353463ff9ff52d098
commit: 6ee542d491589b470ec7cdd353463ff9ff52d098
branch: main
author: Stephen Morton <[email protected]>
committer: gpshead <[email protected]>
date: 2024-11-10T23:08:58-08:00
summary:

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 <[email protected]>

files:
M Lib/test/_test_multiprocessing.py

diff --git a/Lib/test/_test_multiprocessing.py 
b/Lib/test/_test_multiprocessing.py
index bcb024d8386fd1..8329a848a90088 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -2464,6 +2464,19 @@ def test_list_isinstance(self):
         a = self.list()
         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):
         a = self.list(list(range(10)))
         it = iter(a)
@@ -2508,6 +2521,15 @@ def test_dict_isinstance(self):
         a = self.dict()
         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):
         d = self.dict()
         indices = list(range(65, 70))

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to