Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-128438: Add EnvironmentVarGuard for test_builtin.py, test_io.py and test_locale.py #128476

Merged
merged 4 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions Lib/test/test_builtin.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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):
Expand Down
9 changes: 2 additions & 7 deletions Lib/test/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -2892,24 +2892,19 @@ 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()
with warnings.catch_warnings():
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
Expand Down
23 changes: 7 additions & 16 deletions Lib/test/test_locale.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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

Expand Down
Loading