]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-128438: Use `EnvironmentVarGuard` for `test_{builtin,io,locale}.py` (#128476)
authorYan Yanchii <yyanchiy@gmail.com>
Wed, 15 Jan 2025 09:38:43 +0000 (10:38 +0100)
committerGitHub <noreply@github.com>
Wed, 15 Jan 2025 09:38:43 +0000 (10:38 +0100)
Modifying locale-related environment variables in `Lib/test/test_builtin.py`,
`Lib/test/test_io.py` and `Lib/test/test_locale.py` is now achieved by using
an `EnvironmentVarGuard` context instead of an explicit `try-finally` block.

Lib/test/test_builtin.py
Lib/test/test_io.py
Lib/test/test_locale.py

index 5f4eac5267622ff2f69f30ca44afbb01d4a75c85..73b139e405ae59420c07af006bed6570cb73fce4 100644 (file)
@@ -1567,14 +1567,12 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
 
     @unittest.skipIf(sys.flags.utf8_mode, "utf-8 mode is enabled")
     def test_open_default_encoding(self):
-        old_environ = dict(os.environ)
-        try:
+        with EnvironmentVarGuard() as env:
             # try to get a user preferred encoding different than the current
             # locale encoding to check that open() uses the current locale
             # encoding and not the user preferred encoding
             for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
-                if key in os.environ:
-                    del os.environ[key]
+                env.unset(key)
 
             self.write_testfile()
             current_locale_encoding = locale.getencoding()
@@ -1583,9 +1581,6 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
                 fp = open(TESTFN, 'w')
             with fp:
                 self.assertEqual(fp.encoding, current_locale_encoding)
-        finally:
-            os.environ.clear()
-            os.environ.update(old_environ)
 
     @support.requires_subprocess()
     def test_open_non_inheritable(self):
index 33e0161241e87eb2efe04d7f8f1a46255a350986..8c79d2c24a140afdb551e506fa8d2a446a6effef 100644 (file)
@@ -2892,14 +2892,12 @@ class TextIOWrapperTest(unittest.TestCase):
 
     @unittest.skipIf(sys.flags.utf8_mode, "utf-8 mode is enabled")
     def test_default_encoding(self):
-        old_environ = dict(os.environ)
-        try:
+        with os_helper.EnvironmentVarGuard() as env:
             # try to get a user preferred encoding different than the current
             # locale encoding to check that TextIOWrapper() uses the current
             # locale encoding and not the user preferred encoding
             for key in ('LC_ALL', 'LANG', 'LC_CTYPE'):
-                if key in os.environ:
-                    del os.environ[key]
+                env.unset(key)
 
             current_locale_encoding = locale.getencoding()
             b = self.BytesIO()
@@ -2907,9 +2905,6 @@ class TextIOWrapperTest(unittest.TestCase):
                 warnings.simplefilter("ignore", EncodingWarning)
                 t = self.TextIOWrapper(b)
             self.assertEqual(t.encoding, current_locale_encoding)
-        finally:
-            os.environ.clear()
-            os.environ.update(old_environ)
 
     def test_encoding(self):
         # Check the encoding attribute is always set, and valid
index 00e93d8e78443d47b7e9c833f633c76e54802927..c025ed4108fb5834359970d37cf8ecf57bdbb3b2 100644 (file)
@@ -1,5 +1,5 @@
 from decimal import Decimal
-from test.support import verbose, is_android, is_emscripten, is_wasi
+from test.support import verbose, is_android, is_emscripten, is_wasi, os_helper
 from test.support.warnings_helper import check_warnings
 from test.support.import_helper import import_fresh_module
 from unittest import mock
@@ -499,25 +499,16 @@ class TestMiscellaneous(unittest.TestCase):
         else:
             orig_getlocale = None
 
-        orig_env = {}
         try:
-            for key in ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'):
-                if key in os.environ:
-                    orig_env[key] = os.environ[key]
-                    del os.environ[key]
+            with os_helper.EnvironmentVarGuard() as env:
+                for key in ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'):
+                    env.unset(key)
 
-            os.environ['LC_CTYPE'] = 'UTF-8'
-
-            with check_warnings(('', DeprecationWarning)):
-                self.assertEqual(locale.getdefaultlocale(), (None, 'UTF-8'))
+                env.set('LC_CTYPE', 'UTF-8')
 
+                with check_warnings(('', DeprecationWarning)):
+                    self.assertEqual(locale.getdefaultlocale(), (None, 'UTF-8'))
         finally:
-            for k in orig_env:
-                os.environ[k] = orig_env[k]
-
-            if 'LC_CTYPE' not in orig_env:
-                del os.environ['LC_CTYPE']
-
             if orig_getlocale is not None:
                 _locale._getdefaultlocale = orig_getlocale