summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2015-06-04 06:09:56 (GMT)
committerEric Snow <ericsnowcurrently@gmail.com>2015-06-04 06:09:56 (GMT)
commit4fabf02633f7f537a8318a7541eec02cb3338a0d (patch)
treea81cc569e4f838d4f55a6c0bfac2abcfa44861b6 /Lib
parentb6c6a4dc04beba45bc9053abfcc56980c5e31e3d (diff)
downloadcpython-4fabf02633f7f537a8318a7541eec02cb3338a0d.zip
cpython-4fabf02633f7f537a8318a7541eec02cb3338a0d.tar.gz
cpython-4fabf02633f7f537a8318a7541eec02cb3338a0d.tar.bz2
Issue #24369: Defend against key-changes during iteration.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_collections.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index eaceb97..ab2b733 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -2047,6 +2047,23 @@ class CPythonOrderedDictTests(OrderedDictTests, unittest.TestCase):
del od[colliding]
self.assertEqual(list(od.items()), [(key, ...), ('after', ...)])
+ def test_key_change_during_iteration(self):
+ OrderedDict = self.module.OrderedDict
+
+ od = OrderedDict.fromkeys('abcde')
+ self.assertEqual(list(od), list('abcde'))
+ with self.assertRaises(RuntimeError):
+ for i, k in enumerate(od):
+ od.move_to_end(k)
+ self.assertLess(i, 5)
+ with self.assertRaises(RuntimeError):
+ for k in od:
+ od['f'] = None
+ with self.assertRaises(RuntimeError):
+ for k in od:
+ del od['c']
+ self.assertEqual(list(od), list('bdeaf'))
+
def test_issue24347(self):
OrderedDict = self.module.OrderedDict