diff options
author | Sergey Fedoseev <fedoseev.sergey@gmail.com> | 2018-10-20 05:20:39 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-10-20 05:20:39 (GMT) |
commit | a5259fb05d03f4871837c14fed704541a20896c0 (patch) | |
tree | e8d8b3310f9f3df3c316f683c8fad3c547fa2ce2 /Lib/test/test_ordered_dict.py | |
parent | 8c9fd9c91ba748df68a11e3bf216fa158314c9b5 (diff) | |
download | cpython-a5259fb05d03f4871837c14fed704541a20896c0.zip cpython-a5259fb05d03f4871837c14fed704541a20896c0.tar.gz cpython-a5259fb05d03f4871837c14fed704541a20896c0.tar.bz2 |
bpo-34574: Prevent OrderedDict iterators from exhaustion during pickling. (GH-9051)
Diffstat (limited to 'Lib/test/test_ordered_dict.py')
-rw-r--r-- | Lib/test/test_ordered_dict.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Lib/test/test_ordered_dict.py b/Lib/test/test_ordered_dict.py index a296f60..b1d7f86 100644 --- a/Lib/test/test_ordered_dict.py +++ b/Lib/test/test_ordered_dict.py @@ -732,6 +732,23 @@ class CPythonOrderedDictTests(OrderedDictTests, unittest.TestCase): del od['c'] self.assertEqual(list(od), list('bdeaf')) + def test_iterators_pickling(self): + OrderedDict = self.OrderedDict + pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)] + od = OrderedDict(pairs) + + for method_name in ('keys', 'values', 'items'): + meth = getattr(od, method_name) + expected = list(meth())[1:] + for i in range(pickle.HIGHEST_PROTOCOL + 1): + with self.subTest(method_name=method_name, protocol=i): + it = iter(meth()) + next(it) + p = pickle.dumps(it, i) + unpickled = pickle.loads(p) + self.assertEqual(list(unpickled), expected) + self.assertEqual(list(it), expected) + class PurePythonOrderedDictSubclassTests(PurePythonOrderedDictTests): |