aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--Doc/library/test.rst7
-rw-r--r--Lib/test/support/__init__.py3
-rw-r--r--Lib/test/support/os_helper.py11
-rw-r--r--Lib/test/test__colorize.py3
-rw-r--r--Lib/test/test__osx_support.py13
-rw-r--r--Lib/test/test_builtin.py3
-rw-r--r--Lib/test/test_getopt.py3
-rw-r--r--Lib/test/test_io.py3
-rw-r--r--Lib/test/test_locale.py4
-rw-r--r--Lib/test/test_pathlib/test_pathlib.py10
-rw-r--r--Lib/test/test_platform.py3
-rw-r--r--Lib/test/test_regrtest.py3
-rw-r--r--Lib/test/test_shutil.py10
-rw-r--r--Lib/test/test_site.py4
-rw-r--r--Misc/NEWS.d/next/Tests/2025-03-15-12-44-54.gh-issue-131277.JaMlVa.rst3
15 files changed, 38 insertions, 45 deletions
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index def22f8bb8a..46f89756877 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -1435,9 +1435,12 @@ The :mod:`test.support.os_helper` module provides support for os tests.
``value``.
-.. method:: EnvironmentVarGuard.unset(envvar)
+.. method:: EnvironmentVarGuard.unset(envvar, *others)
- Temporarily unset the environment variable ``envvar``.
+ Temporarily unset one or more environment variables.
+
+ .. versionchanged:: next
+ More than one environment variable can be unset.
.. function:: can_symlink()
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index b9ccf7bb4c6..b35ce1b2285 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -2855,8 +2855,7 @@ def no_color():
swap_attr(_colorize, "can_colorize", lambda file=None: False),
EnvironmentVarGuard() as env,
):
- for var in {"FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS"}:
- env.unset(var)
+ env.unset("FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS")
env.set("NO_COLOR", "1")
yield
diff --git a/Lib/test/support/os_helper.py b/Lib/test/support/os_helper.py
index 15dcdc9b1fd..4e39b5a835a 100644
--- a/Lib/test/support/os_helper.py
+++ b/Lib/test/support/os_helper.py
@@ -720,9 +720,10 @@ else:
class EnvironmentVarGuard(collections.abc.MutableMapping):
+ """Class to help protect the environment variable properly.
- """Class to help protect the environment variable properly. Can be used as
- a context manager."""
+ Can be used as a context manager.
+ """
def __init__(self):
self._environ = os.environ
@@ -756,8 +757,10 @@ class EnvironmentVarGuard(collections.abc.MutableMapping):
def set(self, envvar, value):
self[envvar] = value
- def unset(self, envvar):
- del self[envvar]
+ def unset(self, envvar, /, *envvars):
+ """Unset one or more environment variables."""
+ for ev in (envvar, *envvars):
+ del self[ev]
def copy(self):
# We do what os.environ.copy() does.
diff --git a/Lib/test/test__colorize.py b/Lib/test/test__colorize.py
index 42ee7b50a2a..b2f0bb1386f 100644
--- a/Lib/test/test__colorize.py
+++ b/Lib/test/test__colorize.py
@@ -10,8 +10,7 @@ from test.support.os_helper import EnvironmentVarGuard
@contextlib.contextmanager
def clear_env():
with EnvironmentVarGuard() as mock_env:
- for var in "FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS", "TERM":
- mock_env.unset(var)
+ mock_env.unset("FORCE_COLOR", "NO_COLOR", "PYTHON_COLORS", "TERM")
yield mock_env
diff --git a/Lib/test/test__osx_support.py b/Lib/test/test__osx_support.py
index 4a14cb35213..53aa26620a6 100644
--- a/Lib/test/test__osx_support.py
+++ b/Lib/test/test__osx_support.py
@@ -20,12 +20,13 @@ class Test_OSXSupport(unittest.TestCase):
self.prog_name = 'bogus_program_xxxx'
self.temp_path_dir = os.path.abspath(os.getcwd())
self.env = self.enterContext(os_helper.EnvironmentVarGuard())
- for cv in ('CFLAGS', 'LDFLAGS', 'CPPFLAGS',
- 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'CC',
- 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS',
- 'PY_CORE_CFLAGS', 'PY_CORE_LDFLAGS'):
- if cv in self.env:
- self.env.unset(cv)
+
+ self.env.unset(
+ 'CFLAGS', 'LDFLAGS', 'CPPFLAGS',
+ 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'CC',
+ 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS',
+ 'PY_CORE_CFLAGS', 'PY_CORE_LDFLAGS'
+ )
def add_expected_saved_initial_values(self, config_vars, expected_vars):
# Ensure that the initial values for all modified config vars
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index a0bb6855c8f..90998ffce6d 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -1568,8 +1568,7 @@ class BuiltinTest(ComplexesAreIdenticalMixin, unittest.TestCase):
# 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'):
- env.unset(key)
+ env.unset('LC_ALL', 'LANG', 'LC_CTYPE')
self.write_testfile()
current_locale_encoding = locale.getencoding()
diff --git a/Lib/test/test_getopt.py b/Lib/test/test_getopt.py
index ed967ad2761..8d0d5084abb 100644
--- a/Lib/test/test_getopt.py
+++ b/Lib/test/test_getopt.py
@@ -13,8 +13,7 @@ sentinel = object()
class GetoptTests(unittest.TestCase):
def setUp(self):
self.env = self.enterContext(EnvironmentVarGuard())
- if "POSIXLY_CORRECT" in self.env:
- del self.env["POSIXLY_CORRECT"]
+ del self.env["POSIXLY_CORRECT"]
def assertError(self, *args, **kwargs):
self.assertRaises(getopt.GetoptError, *args, **kwargs)
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 23eb3b32b51..455a87b9ab0 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2896,8 +2896,7 @@ class TextIOWrapperTest(unittest.TestCase):
# 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'):
- env.unset(key)
+ env.unset('LC_ALL', 'LANG', 'LC_CTYPE')
current_locale_encoding = locale.getencoding()
b = self.BytesIO()
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index dc1ba258e0b..798c6ad62cd 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -500,9 +500,7 @@ class TestMiscellaneous(unittest.TestCase):
try:
with os_helper.EnvironmentVarGuard() as env:
- for key in ('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE'):
- env.unset(key)
-
+ env.unset('LC_ALL', 'LC_CTYPE', 'LANG', 'LANGUAGE')
env.set('LC_CTYPE', 'UTF-8')
with check_warnings(('', DeprecationWarning)):
diff --git a/Lib/test/test_pathlib/test_pathlib.py b/Lib/test/test_pathlib/test_pathlib.py
index 36fb62e53e1..bda94f51968 100644
--- a/Lib/test/test_pathlib/test_pathlib.py
+++ b/Lib/test/test_pathlib/test_pathlib.py
@@ -3232,7 +3232,7 @@ class PathTest(PurePathTest):
p7 = P(f'~{fakename}/Documents')
with os_helper.EnvironmentVarGuard() as env:
- env.pop('HOME', None)
+ env.unset('HOME')
self.assertEqual(p1.expanduser(), P(userhome) / 'Documents')
self.assertEqual(p2.expanduser(), P(userhome) / 'Documents')
@@ -3345,10 +3345,7 @@ class PathTest(PurePathTest):
def test_expanduser_windows(self):
P = self.cls
with os_helper.EnvironmentVarGuard() as env:
- env.pop('HOME', None)
- env.pop('USERPROFILE', None)
- env.pop('HOMEPATH', None)
- env.pop('HOMEDRIVE', None)
+ env.unset('HOME', 'USERPROFILE', 'HOMEPATH', 'HOMEDRIVE')
env['USERNAME'] = 'alice'
# test that the path returns unchanged
@@ -3386,8 +3383,7 @@ class PathTest(PurePathTest):
env['HOMEPATH'] = 'Users\\alice'
check()
- env.pop('HOMEDRIVE', None)
- env.pop('HOMEPATH', None)
+ env.unset('HOMEDRIVE', 'HOMEPATH')
env['USERPROFILE'] = 'C:\\Users\\alice'
check()
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index e04ad142061..ca73b043d31 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -368,8 +368,7 @@ class PlatformTest(unittest.TestCase):
with support.swap_attr(platform, '_wmi_query', raises_oserror):
with os_helper.EnvironmentVarGuard() as environ:
try:
- if 'PROCESSOR_ARCHITEW6432' in environ:
- del environ['PROCESSOR_ARCHITEW6432']
+ del environ['PROCESSOR_ARCHITEW6432']
environ['PROCESSOR_ARCHITECTURE'] = 'foo'
platform._uname_cache = None
system, node, release, version, machine, processor = platform.uname()
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index 38a0d3f6779..510c8f69631 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -422,8 +422,7 @@ class ParseArgsTestCase(unittest.TestCase):
# which has an unclear API
with os_helper.EnvironmentVarGuard() as env:
# Ignore SOURCE_DATE_EPOCH env var if it's set
- if 'SOURCE_DATE_EPOCH' in env:
- del env['SOURCE_DATE_EPOCH']
+ del env['SOURCE_DATE_EPOCH']
regrtest = main.Regrtest(ns)
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 86bdc302ea7..ed01163074a 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -2458,7 +2458,7 @@ class TestWhich(BaseTest, unittest.TestCase):
def test_environ_path_missing(self):
with os_helper.EnvironmentVarGuard() as env:
- env.pop('PATH', None)
+ del env['PATH']
# without confstr
with unittest.mock.patch('os.confstr', side_effect=ValueError, \
@@ -2484,7 +2484,7 @@ class TestWhich(BaseTest, unittest.TestCase):
def test_empty_path_no_PATH(self):
with os_helper.EnvironmentVarGuard() as env:
- env.pop('PATH', None)
+ del env['PATH']
rv = shutil.which(self.file)
self.assertIsNone(rv)
@@ -3446,8 +3446,7 @@ class TestGetTerminalSize(unittest.TestCase):
expected = (int(size[1]), int(size[0])) # reversed order
with os_helper.EnvironmentVarGuard() as env:
- del env['LINES']
- del env['COLUMNS']
+ env.unset('LINES', 'COLUMNS')
actual = shutil.get_terminal_size()
self.assertEqual(expected, actual)
@@ -3455,8 +3454,7 @@ class TestGetTerminalSize(unittest.TestCase):
@unittest.skipIf(support.is_wasi, "WASI has no /dev/null")
def test_fallback(self):
with os_helper.EnvironmentVarGuard() as env:
- del env['LINES']
- del env['COLUMNS']
+ env.unset('LINES', 'COLUMNS')
# sys.__stdout__ has no fileno()
with support.swap_attr(sys, '__stdout__', None):
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 035913cdd05..16cf25798a7 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -355,9 +355,7 @@ class HelperFunctionsTests(unittest.TestCase):
with EnvironmentVarGuard() as environ, \
mock.patch('os.path.expanduser', lambda path: path):
-
- del environ['PYTHONUSERBASE']
- del environ['APPDATA']
+ environ.unset('PYTHONUSERBASE', 'APPDATA')
user_base = site.getuserbase()
self.assertTrue(user_base.startswith('~' + os.sep),
diff --git a/Misc/NEWS.d/next/Tests/2025-03-15-12-44-54.gh-issue-131277.JaMlVa.rst b/Misc/NEWS.d/next/Tests/2025-03-15-12-44-54.gh-issue-131277.JaMlVa.rst
new file mode 100644
index 00000000000..0ea2423008b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2025-03-15-12-44-54.gh-issue-131277.JaMlVa.rst
@@ -0,0 +1,3 @@
+Allow to unset one or more environment variables at once via
+:meth:`EnvironmentVarGuard.unset()
+<test.support.os_helper.EnvironmentVarGuard.unset>`. Patch by Bénédikt Tran.