summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_ordered_dict.py
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2018-10-20 05:20:39 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2018-10-20 05:20:39 (GMT)
commita5259fb05d03f4871837c14fed704541a20896c0 (patch)
treee8d8b3310f9f3df3c316f683c8fad3c547fa2ce2 /Lib/test/test_ordered_dict.py
parent8c9fd9c91ba748df68a11e3bf216fa158314c9b5 (diff)
downloadcpython-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.py17
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):