diff options
author | Eric Snow <ericsnowcurrently@gmail.com> | 2015-06-04 06:09:56 (GMT) |
---|---|---|
committer | Eric Snow <ericsnowcurrently@gmail.com> | 2015-06-04 06:09:56 (GMT) |
commit | 4fabf02633f7f537a8318a7541eec02cb3338a0d (patch) | |
tree | a81cc569e4f838d4f55a6c0bfac2abcfa44861b6 /Lib | |
parent | b6c6a4dc04beba45bc9053abfcc56980c5e31e3d (diff) | |
download | cpython-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.py | 17 |
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 |