https://github.com/python/cpython/commit/ae7f621c33c854334c69cf97260c7516170dcf0d
commit: ae7f621c33c854334c69cf97260c7516170dcf0d
branch: main
author: Yan Yanchii <[email protected]>
committer: picnixz <[email protected]>
date: 2025-01-15T10:38:43+01:00
summary:

gh-128438: Use `EnvironmentVarGuard` for `test_{builtin,io,locale}.py` (#128476)

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.

files:
M Lib/test/test_builtin.py
M Lib/test/test_io.py
M Lib/test/test_locale.py

diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 5f4eac5267622f..73b139e405ae59 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1567,14 +1567,12 @@ def test_open(self):
 
     @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 @@ def test_open_default_encoding(self):
                 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):
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 33e0161241e87e..8c79d2c24a140a 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2892,14 +2892,12 @@ def test_reconfigure_line_buffering(self):
 
     @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 @@ def test_default_encoding(self):
                 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
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index 00e93d8e78443d..c025ed4108fb58 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -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 @@ def test_defaults_UTF8(self):
         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
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to