mirror of
https://github.com/python/cpython.git
synced 2025-11-11 11:01:39 +00:00
[3.14] gh-90548: Allow Alpine/MUSL to pass test_c_locale_coercion. (GH-134454) (#138600)
Co-authored-by: R. David Murray <rdmurray@bitdance.com>
This commit is contained in:
parent
95ec2c1ead
commit
096fa045fd
1 changed files with 23 additions and 10 deletions
|
|
@ -12,7 +12,9 @@
|
|||
from test.support.script_helper import run_python_until_end
|
||||
|
||||
|
||||
# Set the list of ways we expect to be able to ask for the "C" locale
|
||||
# Set the list of ways we expect to be able to ask for the "C" locale.
|
||||
# 'invalid.ascii' is an invalid LOCALE name and so should get turned in to the
|
||||
# default locale, which is traditionally C.
|
||||
EXPECTED_C_LOCALE_EQUIVALENTS = ["C", "invalid.ascii"]
|
||||
|
||||
# Set our expectation for the default encoding used in the C locale
|
||||
|
|
@ -21,6 +23,7 @@
|
|||
EXPECTED_C_LOCALE_FS_ENCODING = "ascii"
|
||||
|
||||
# Set our expectation for the default locale used when none is specified
|
||||
DEFAULT_LOCALE_IS_C = True
|
||||
EXPECT_COERCION_IN_DEFAULT_LOCALE = True
|
||||
|
||||
TARGET_LOCALES = ["C.UTF-8", "C.utf8", "UTF-8"]
|
||||
|
|
@ -30,12 +33,12 @@
|
|||
# Android defaults to using UTF-8 for all system interfaces
|
||||
EXPECTED_C_LOCALE_STREAM_ENCODING = "utf-8"
|
||||
EXPECTED_C_LOCALE_FS_ENCODING = "utf-8"
|
||||
elif sys.platform.startswith("linux"):
|
||||
# Linux distros typically alias the POSIX locale directly to the C
|
||||
# locale.
|
||||
# TODO: Once https://bugs.python.org/issue30672 is addressed, we'll be
|
||||
# able to check this case unconditionally
|
||||
EXPECTED_C_LOCALE_EQUIVALENTS.append("POSIX")
|
||||
elif support.linked_to_musl():
|
||||
# MUSL defaults to utf-8 unless the C locale is set explicitly.
|
||||
EXPECTED_C_LOCALE_EQUIVALENTS = ["C"]
|
||||
DEFAULT_LOCALE_IS_C = False
|
||||
DEFAULT_ENCODING = 'utf-8'
|
||||
EXPECT_COERCION_IN_DEFAULT_LOCALE = False
|
||||
elif sys.platform.startswith("aix"):
|
||||
# AIX uses iso8859-1 in the C locale, other *nix platforms use ASCII
|
||||
EXPECTED_C_LOCALE_STREAM_ENCODING = "iso8859-1"
|
||||
|
|
@ -52,6 +55,11 @@
|
|||
# VxWorks defaults to using UTF-8 for all system interfaces
|
||||
EXPECTED_C_LOCALE_STREAM_ENCODING = "utf-8"
|
||||
EXPECTED_C_LOCALE_FS_ENCODING = "utf-8"
|
||||
if sys.platform.startswith("linux"):
|
||||
# Linux recognizes POSIX as a synonym for C. Python will always coerce
|
||||
# if the locale is set to POSIX, but not all platforms will use the
|
||||
# C locale encodings if POSIX is set, so we'll only test it on linux.
|
||||
EXPECTED_C_LOCALE_EQUIVALENTS.append("POSIX")
|
||||
|
||||
# Note that the above expectations are still wrong in some cases, such as:
|
||||
# * Windows when PYTHONLEGACYWINDOWSFSENCODING is set
|
||||
|
|
@ -362,9 +370,14 @@ def _check_c_locale_coercion(self,
|
|||
base_var_dict["PYTHONCOERCECLOCALE"] = coerce_c_locale
|
||||
|
||||
# Check behaviour for the default locale
|
||||
_fs_encoding = fs_encoding
|
||||
_stream_encoding = stream_encoding
|
||||
if not DEFAULT_LOCALE_IS_C and 'LC_ALL' not in extra_vars:
|
||||
_fs_encoding = _stream_encoding = DEFAULT_ENCODING
|
||||
with self.subTest(default_locale=True,
|
||||
PYTHONCOERCECLOCALE=coerce_c_locale):
|
||||
if EXPECT_COERCION_IN_DEFAULT_LOCALE:
|
||||
if (EXPECT_COERCION_IN_DEFAULT_LOCALE
|
||||
or (not DEFAULT_LOCALE_IS_C and 'LC_ALL' in extra_vars)):
|
||||
_expected_warnings = expected_warnings
|
||||
_coercion_expected = coercion_expected
|
||||
else:
|
||||
|
|
@ -378,8 +391,8 @@ def _check_c_locale_coercion(self,
|
|||
_expected_warnings == [CLI_COERCION_WARNING]):
|
||||
_expected_warnings = None
|
||||
self._check_child_encoding_details(base_var_dict,
|
||||
fs_encoding,
|
||||
stream_encoding,
|
||||
_fs_encoding,
|
||||
_stream_encoding,
|
||||
None,
|
||||
_expected_warnings,
|
||||
_coercion_expected)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue