diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2017-07-04 04:55:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-04 04:55:32 (GMT) |
commit | bebd2cfa5f21811dd0ee4f3b1a1b85d379b83436 (patch) | |
tree | b089cbbaf1aa59ae16419beb7523a6a57dfe1c1f /Lib/test/test_os.py | |
parent | 4132adb4b8f90893d8f19ff46edff56f189faca0 (diff) | |
download | cpython-bebd2cfa5f21811dd0ee4f3b1a1b85d379b83436.zip cpython-bebd2cfa5f21811dd0ee4f3b1a1b85d379b83436.tar.gz cpython-bebd2cfa5f21811dd0ee4f3b1a1b85d379b83436.tar.bz2 |
[3.6] bpo-30441: Fix bug when modifying os.environ while iterating over it (GH-2409). (#2556)
(cherry picked from commit 8a8d28501fc8ce25926d168f1c657656c809fd4c)
Diffstat (limited to 'Lib/test/test_os.py')
-rw-r--r-- | Lib/test/test_os.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index fdeb9a9..f74c199 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -836,6 +836,30 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol): self.assertIs(cm.exception.args[0], missing) self.assertTrue(cm.exception.__suppress_context__) + def _test_environ_iteration(self, collection): + iterator = iter(collection) + new_key = "__new_key__" + + next(iterator) # start iteration over os.environ.items + + # add a new key in os.environ mapping + os.environ[new_key] = "test_environ_iteration" + + try: + next(iterator) # force iteration over modified mapping + self.assertEqual(os.environ[new_key], "test_environ_iteration") + finally: + del os.environ[new_key] + + def test_iter_error_when_changing_os_environ(self): + self._test_environ_iteration(os.environ) + + def test_iter_error_when_changing_os_environ_items(self): + self._test_environ_iteration(os.environ.items()) + + def test_iter_error_when_changing_os_environ_values(self): + self._test_environ_iteration(os.environ.values()) + class WalkTests(unittest.TestCase): """Tests for os.walk().""" |