summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_os.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-07-04 04:55:32 (GMT)
committerGitHub <noreply@github.com>2017-07-04 04:55:32 (GMT)
commitbebd2cfa5f21811dd0ee4f3b1a1b85d379b83436 (patch)
treeb089cbbaf1aa59ae16419beb7523a6a57dfe1c1f /Lib/test/test_os.py
parent4132adb4b8f90893d8f19ff46edff56f189faca0 (diff)
downloadcpython-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.py24
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()."""